home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / webx / jpged26s.lzh / Huffman.s < prev    next >
Text File  |  1996-11-10  |  12KB  |  640 lines

  1. *
  2. *
  3. *       GETHEAD.S
  4. *
  5. *
  6. *
  7. include  DOSCALL.MAC
  8. include  JPEG.MAC
  9. include  work.inc
  10.  
  11.     .xref    DHTDCL,DHT
  12.     .xref    clear_area
  13.  
  14.   .text
  15. ************************************
  16. *
  17. *    ╩╠╧▌├░╠▐┘é╠║░─▐Éöĵô╛
  18. *
  19. *    ôⁿù═
  20. *        a1    ╩╠╧▌├░╠▐┘▒─▐┌╜
  21. *    Åoù═    
  22. *        d4.l    ║░─▐Éö
  23. *    öjë≤
  24. *        d0,d6
  25. ************************************
  26. .xdef CountCodeNumber
  27. CountCodeNumber
  28.  
  29.     moveq.l    #0,d4
  30.     moveq.l    #0,d0
  31.     moveq.l    #16-1,d6
  32.  
  33. @@    move.b    (a1)+,d0
  34.     add.w    d0,d4
  35.     dbra    d6,@b
  36.  
  37.     lea.l    -16(a1),a1
  38.     rts
  39. ***********************************************
  40. *       MAKETREE
  41. *
  42. *    ôⁿù═
  43. *        d0.w    èeDECODE_TBLé≡ïNô_é╞é╡é╜╡╠╛»─/4
  44. *        d4.w    ùté╠Éö
  45. *        a0.l    Tree
  46. *        a1.l    Counter
  47. *        a2.l    ID
  48. *        a3.l    èeDECODE_TBL▒─▐┌╜
  49. *    Åoù═
  50. *        a2.l    Äƒé╠DHT▒─▐┌╜
  51. *    öjë≤    d0-d4/d6-d7/a0-a1/a3
  52. ***********************************************
  53. .xdef    MakeTree
  54. MakeTree
  55.     move.l    d5,-(sp)
  56.  
  57.     swap.w    d0
  58.     move.w    #$8008,d0
  59.     move.l    #$ffff_ffff,(a0)+    ┤╫░ö╗ÆΦùp║░─▐
  60.  
  61. *8╦▐»─êΩôxé╔├▐║░─▐├░╠▐┘ì∞ɼ
  62. *------------------------------
  63.     moveq.l    #1,d6        î╗ì▌é╠├▐║░─▐╦▐»─Éö
  64.     moveq.l    #1,d3
  65.     move.w    #256,d7
  66. Mk8bitDecodeTbl
  67.     move.l    d0,-(sp)
  68.  
  69.     lsr.w    d7
  70.     add.w    d3,d3
  71.     moveq.l    #0,d5
  72.     move.b    (a1)+,d5
  73.     sub.w    d5,d4
  74.  
  75.     *ùté╠òöò¬ì∞ɼ
  76.     *--------------------
  77.     sub.w    d5,d3
  78.     bcc    Mk8bitDecodeTblNextCode
  79.     add.w    d5,d4
  80.     sub.w    d3,d4
  81.     add.w    d3,d5
  82.     moveq.l    #0,d3
  83.     bra    Mk8bitDecodeTblNextCode
  84.  
  85. Mk8bitDecodeTblSetCode
  86.  
  87.     movem.w    d6-d7,-(sp)
  88.  
  89.         moveq.l    #0,d0
  90.         move.b    (a2)+,d0
  91.  
  92.         moveq.l    #$0f,d2
  93.         and.b    d0,d2
  94.         lsr.b    #4,d0
  95.  
  96.         swap.w    d0
  97.         move.b    d2,d0
  98.         add.b    d6,d0
  99.         cmp.b    #8,d0
  100.         bls    Mk8bitDecodeTblACDC
  101.  
  102.     *ü@[╩╠╧▌òäìå]é╛é»é¬Ä√é▄é┴é╜ÅΩìç
  103.     *
  104.     *    offset + 0.b    $00
  105.     *         1.b    0é╠î┬Éö
  106.     *         2.b    $00
  107.     *         3.b    ò£ìå├░╠▐┘é┼ë≡É═Åoùêé╜╦▐»─Éö
  108.     *         4.w    $0000([AC/DCÆl]é═Ä√é▄éτé╚é⌐é┴é╜òäìå)
  109.     *         6.w    AC/DCÆlé╠╦▐»─Éö
  110.     *-----------------------------------------------
  111.         move.b    d6,d0
  112.         moveq.l    #0,d1
  113.         move.b    d2,d1
  114.         bra    Mk8bitDecodeTblNoDCAC
  115.  
  116.     *ü@[╩╠╧▌òäìå]é╞[AC/DCÆl]é¬Ä√é▄é┴é╜ÅΩìç
  117.     *    offset + 0.b    $00
  118.     *         1.b    0é╠î┬Éö    (EOBé╠ÅΩìç 64)
  119.     *         2.b    $00
  120.     *         3.b    ò£ìå├░╠▐┘é┼ë≡É═Åoùêé╜╦▐»─Éö
  121.     *         4.w    AC/DCÆl(0ê╚ë║é╠Ælé═é│éτé╔-2é╖éΘ)
  122.     *         6.w    Reserved
  123.     *-----------------------------------------------
  124. Mk8bitDecodeTblACDC
  125.         move.l    #$fffe_0000,d1
  126.         lsl.l    d2,d1
  127.  
  128.         tst.b    d2
  129.         bnz    Mk8bitDecodeTblSet
  130.  
  131.         *AC/DC╦▐»─Éöé¬0é┼üA0é╠î┬Éöé¬0é╚éτé╬üAEOBé┼éáéΘ
  132.         *----------------------------
  133.         swap.w    d0
  134.         tst.b    d0
  135.         bnz    @f    0é╠î┬Éöé¬0é┼é═é╚éó
  136.         move.w    #64,d0
  137. @@        swap.w    d0
  138.  
  139. Mk8bitDecodeTblNoDCAC
  140.         move.w    d7,d6
  141.         bra    Mk8bitDecodeTblSet2
  142.  
  143.     *├▐║░─▐├░╠▐┘Åæé½ì₧é▌
  144.     *----------------------------
  145. Mk8bitDecodeTblSet
  146.         lsr.w    d7
  147.         move.w    d7,d6
  148.         subq.w    #1,d2
  149.         lsr.w    d2,d6
  150.  
  151.         move.w    d7,-(sp)
  152.         bsr    Mk8bitDecodeTblSetSub
  153.         move.w    (sp)+,d7
  154.         swap.w    d1
  155.         neg.w    d1
  156.         swap.w    d1
  157. Mk8bitDecodeTblSet2
  158.         bsr    Mk8bitDecodeTblSetSub
  159.  
  160.     movem.w    (sp)+,d6-d7
  161.  
  162. Mk8bitDecodeTblNextCode
  163.  
  164.     dbra    d5,Mk8bitDecodeTblSetCode
  165.  
  166. *Ä}é╠òöò¬é╠Åêù¥
  167. *-------------------
  168.         move.l    (sp)+,d0
  169.  
  170.     *ùté¬û│éóé╠é╔Ä}é¬Äcé┴é─éóéΘÅΩìçé═üA┤╫░ö╗ÆΦùp║░─▐é≡É▌ÆΦé╡ÅIù╣
  171.     *--------------------
  172.         tst.w    d4
  173.         bnz    Mk8bitDecodeTblùtùL    ùté═é▄é╛éáéΘ
  174.  
  175.         *ü@╩╠╧▌ò£ìå┤╫░
  176.         *
  177.         *    offset + 0.w    TreeÅπé╠ê╩Æu
  178.         *         2.b    $80
  179.         *         3.b    ò£ìå├░╠▐┘é┼ë≡É═Åoùêé╜╦▐»─Éö(8î┼ÆΦ)
  180.         *         4.w    Reserved
  181.         *         6.w    Reserved
  182.         *------------------------------------------
  183.         mulu.w    d3,d7
  184.         bra    2f
  185. 1        move.l    d0,(a3)+
  186.         clr.l    (a3)+
  187.         lea.l    3*8(a3),a3
  188. 2        dbra.w    d7,1b
  189.         bra    maketreeEnd
  190.  
  191.     *ùté¬Äcé┴é─éóéΘé╠é╔Ä}é¬û│é¡é╚é┴é╜éτüAÅIù╣
  192.     *--------------------
  193. Mk8bitDecodeTblùtùL
  194.         tst.w    d3
  195.         bze    maketreeEnd        Ä}û│é╡
  196.  
  197.     *ăé╠╦▐»─┴¬»╕
  198.     *-------------------------
  199.         addq.w    #1,d6
  200.         cmp.w    #8,d6
  201.         bls    Mk8bitDecodeTbl        é▄é╛8bitò¬é╠├▐║░─▐├░╠▐┘é≡ì∞ɼé╡é─éóé╚éó
  202.  
  203.     *ü@8bité≡Æ┤éªéΘ[╩╠╧▌òäìå]é╠ÅΩìç
  204.     *
  205.     *    offset + 0.w    TreeÅπé╠ê╩Æu
  206.     *         2.b    $80
  207.     *         3.b    ò£ìå├░╠▐┘é┼ë≡É═Åoùêé╜╦▐»─Éö(8î┼ÆΦ)
  208.     *         4.w    Reserved
  209.     *         6.w    Reserved
  210.     *-----------------------------------    
  211.         *Ä}é¬ù]éτé╚éóé⌐â`âFâbâN
  212.         *------------------------
  213.         moveq.l    #0,d6
  214.         move.w    d3,d1
  215.         add.w    d1,d1
  216.         cmp.w    d4,d1
  217.         bls    @f        ù]éτé╚éó
  218.  
  219.         move.w    d3,d6
  220.         move.w    d4,d3
  221.         addq.w    #1,d3
  222.         lsr.w    d3
  223.         sub.w    d3,d6
  224.         move.l    d0,d1
  225. @@
  226.         *ù]éτé╚éóé┼éáéδéñÄ}é╠ìsé½Éµé≡É▌ÆΦé╖éΘ
  227.         *-----------------------
  228.         move.w    d3,d7
  229.         swap.w    d0
  230.         addq.w    #1,d0
  231.         bra    2f
  232. 1        swap.w    d0
  233.         move.l    d0,(a3)+
  234.         clr.l    (a3)+
  235.         swap.w    d0
  236.         addq.w    #1,d0
  237.         lea.l    3*8(a3),a3
  238. 2        dbra.w    d7,1b
  239.  
  240.         *ù]éΘé╠é¬èmÄ└é╚Ä}é≡ìsé½Ä~é▄éΦé╔é╖éΘ
  241.         *-----------------------
  242.         bra    2f
  243. 1        move.l    d1,(a3)+
  244.         clr.l    (a3)+
  245.         lea.l    3*8(a3),a3
  246. 2        dbra.w    d6,1b
  247.  
  248. *8╦▐»─é≡Æ┤éªéΘ╩╠╧▌òäìåùp├░╠▐┘ì∞ɼ
  249. *------------------------------
  250.         moveq.l    #16-8-1,d6    ìléªéτéΩéΘì┼æσé╠ÄcéΦ╦▐»─Éö-1
  251.         move.w    #$8000,d1    bit 15=1)ùté╠ê≤
  252. MakeOverTree
  253.         add.w    d3,d3
  254.         moveq.l    #0,d5
  255.         move.b    (a1)+,d5
  256.         sub.w    d5,d4
  257.  
  258.     *ùté╠òöò¬ì∞ɼ
  259.     *--------------------
  260.         sub.w    d5,d3
  261.         bcc    2f
  262.         *Ä}é╠ÉöéµéΦùté¬æ╜éóÅΩìçüAÄ}é╠Éöé╔ìçéφé╣éΘ
  263.         *-----------------------
  264.         add.w    d5,d4
  265.         sub.w    d3,d4
  266.         add.w    d3,d5        d5=Ä}é╠Éö (d3=d3-d5+d5)
  267.         moveq.l    #0,d3
  268.         bra    2f
  269. 1        move.b    (a2)+,d1
  270.         move.w    d1,(a0)+
  271. 2        dbra    d5,1b
  272.  
  273.     *Ä}é╠òöò¬ì∞ɼ
  274.     *-------------------
  275.         *ù]éΦé╠Ä}é╠ÅΩìçé═üA┤╫░ö╗ÆΦùp║░─▐é≡ûäé▀ì₧é▐
  276.         *--------------------
  277.         move.w    d3,d5
  278.         bze    maketreeEnd    Ä}é═û│éó
  279.  
  280.     *ù]éΦé╖é¼é╠Ä}é≡èáéΘ
  281.     *-------------------
  282.         tst.w    d4
  283.         bnz    2f        é▄é╛ùté¬éáéΘé╠é┼ù]éΦé┼é═é╚éó
  284.  
  285.         *ùté¬û│éóé╠é┼üAÄcéΦé╠Ä}é═æSòöù]éΦ
  286.         *----------------
  287.         moveq.l    #-1,d0
  288. @@        move.w    d0,(a0)+
  289.         dbra    d5,@b
  290.         bra    maketreeEnd
  291.  
  292. 1        move.w    d0,(a0)+
  293.         addq.w    #1,d0
  294. 2        dbra    d5,1b
  295.  
  296.         dbra    d6,MakeOverTree
  297.  
  298. maketreeEnd
  299.         add.w    d4,d4
  300.         adda.w    d4,a2        Äƒé╠╩╠╧▌òäìå├░╠▐┘ĵô╛▒─▐┌╜îvÄZ
  301.         move.l    (sp)+,d5
  302.         rts
  303.  
  304. ******************
  305. *    ôⁿù═    d0.l
  306. *        d1.l
  307. *        d6.w
  308. *        d7.w
  309. *        a3.l
  310. *    Åoù═    d1.l
  311. *    öjë≤    d2.w
  312. ******************
  313. Mk8bitDecodeTblSetSub
  314.         move.w    d6,d2
  315.         subq.w    #1,d2
  316. @@        move.l    d0,(a3)+
  317.         move.l    d1,(a3)+
  318.         lea.l    3*8(a3),a3
  319.         dbra.w    d2,@b
  320.         swap.w    d1
  321.         addq.w    #2,d1
  322.         swap.w    d1
  323.         sub.w    d6,d7
  324.         bhi    Mk8bitDecodeTblSetSub
  325.         rts
  326. ******************************************
  327. *
  328. *  ânâtâ}âôòäìåë╗âeü[âuâïì∞ɼ
  329. *
  330. *    ôⁿù═
  331. *        é╚é╡
  332. *    Åoù═
  333. *        é╚é╡
  334. ******************************************
  335. .xdef    make_ENCODE_table
  336. make_ENCODE_table
  337.  
  338.     lea.l    DHTDCL(pc),a0
  339.     lea.l    DCLtable(a6),a1
  340.     bsr    make_ENCODE_table_sub
  341.  
  342.     lea.l    ACLtable(a6),a1
  343.     bsr    make_ENCODE_table_sub
  344.  
  345.     lea.l    DCCtable(a6),a1
  346.     bsr    make_ENCODE_table_sub
  347.  
  348.     lea.l    ACCtable(a6),a1
  349.  
  350. make_ENCODE_table_sub
  351.  
  352.     addq.l    #1,a0        *é╗éΩé╝éΩé╠╩╠╧▌òäìå╦▐»─Æ╖ûêé╠ĵéΦô╛éΘÆlé╠Éö
  353.     lea.l    16(a0),a2    *é╗éΩé╝éΩé╠╩╠╧▌òäìåé╔æ╬ë₧é╖éΘÆlé╠├░╠▐┘
  354.     moveq.l    #$0000,d0    *╩╠╧▌òäìå
  355.     moveq.l    #$0001,d1    *╩╠╧▌òäìå╦▐»─Æ╖
  356.     move.w    #$8000,d2    *╩╠╧▌òäìåë┴ÄZÆl
  357. 1:
  358.     move.b    (a0)+,d3
  359.     beq    3f        *é▒é╠╦▐»─Æ╖é╔é═Ælé═æ╢ì▌é╡é╚éó
  360. 2:
  361.     moveq.l    #0,d4
  362.     move.b    (a2)+,d4
  363.     lsl.w    #2,d4
  364.     movem.w    d0-d1,(a1,d4.w)    
  365.     add.w    d2,d0
  366.     subq.b    #1,d3
  367.     bnz    2b
  368. 3:
  369.     lsr.w    #1,d2
  370.     addq.w    #1,d1        *╦▐»─Æ╖æ¥ë┴
  371.     cmp.w    #16,d1
  372.     bls    1b
  373.  
  374.     movea.l    a2,a0
  375.     rts
  376.  
  377. ***************************************
  378. *
  379. *    Ælé╠Åoî╗èmùª├░╠▐┘Åëè·ë╗
  380. *
  381. ***************************************
  382. .xdef ClrRateTable
  383. ClrRateTable
  384.         lea.l    RateTableStart(a6),a5
  385.         move.l    #RateTableEnd-RateTableStart,d5
  386.         bra    clear_area
  387. ***************************************
  388. *
  389. *    ╩╠╧▌òäìå├░╠▐┘ì┼ôKë╗
  390. *
  391. ***************************************
  392. .xdef OptHuffmanTable
  393. OptHuffmanTable
  394.         moveq.l    #2,d6        DHT╗▓╜▐
  395.         lea.l    DHTDCL(pc),a2
  396.  
  397.         moveq.l    #$00,d0
  398.         moveq.l    #16-4-1,d7
  399.         lea.l    DCLtable(a6),a3
  400.         bsr    OptHuffmanTableMake
  401.  
  402.         moveq.l    #$10,d0
  403.         move.w    #16*16-4-1,d7
  404.         lea.l    ACLtable(a6),a3
  405.         bsr    OptHuffmanTableMake
  406.  
  407.         tst.b    colormode(a6)
  408.         bne    OptHuffmanTableEnd    *╙╔╕█ëµæ£é┼éáéΘ
  409.         
  410.         moveq.l    #$01,d0
  411.         moveq.l    #16-4-1,d7
  412.         lea.l    DCCtable(a6),a3
  413.         bsr    OptHuffmanTableMake
  414.  
  415.         moveq.l    #$11,d0
  416.         move.w    #16*16-4-1,d7
  417.         lea.l    ACCtable(a6),a3
  418.         bsr    OptHuffmanTableMake
  419.  
  420. OptHuffmanTableEnd
  421.  
  422.         lea.l    DHT+2(pc),a1
  423.         move.w    d6,(a1)
  424.         rts
  425. *******************************************************
  426. *
  427. *    ╩╠╧▌┬╪░ì∞ɼ
  428. *
  429. *******************************************************
  430. .xdef OptHuffmanTableMake
  431. OptHuffmanTableMake
  432. *╩╠╧▌┬╪░ì∞ɼ
  433. *--------------------
  434.         move.b    d0,(a2)+
  435.         addq.w    #1,d6        DHT╗▓╜▐ìXÉV
  436.  
  437.         lea.l    HuffTree(a6),a0
  438.         moveq.l    #16,d3        
  439.  
  440. MakeTreeLoop
  441.     *êΩö╘û┌é╞ô±ö╘û┌é╔żé│éóÆlé╠├░╠▐┘▒─▐┌╜ĵô╛
  442.     *-----------------------
  443.         moveq.l    #-1,d0        ì┼żÆl
  444.         moveq.l    #-1,d1        éQö╘û┌é╔żé│éóÆl
  445.         lea.l    $0000.w,a4    ì┼żÆlé╠├░╠▐┘▒─▐┌╜
  446.         movea.l    a4,a5        ô±ö╘û┌é╔żé│éóÆlé╠├░╠▐┘▒─▐┌╜
  447.  
  448.         *ùté╠òöò¬îƒì⌡
  449.         *---------------------
  450.         move.w    d7,d4
  451.         movea.l    a3,a1
  452.         bsr    OptHuffmanTableSub
  453.  
  454.         *Ä}é╔é╚é┴é─éóéΘòöò¬îƒì⌡
  455.         *---------------------
  456.         lea.l    HuffTree(a6),a1
  457.         move.l    a0,d4
  458.         sub.l    a1,d4
  459.         lsr.w    #3,d4
  460.         beq    @f        Ä}é═é▄é╛é╚éó
  461.         subq.w    #1,d4
  462.         bsr    OptHuffmanTableSub
  463. @@
  464.     *Ä}é≡├░╠▐┘é╔ôoÿ^
  465.     *--------------------
  466.         *Éeé╓é╠╬▀▓▌└É▌ÆΦ
  467.         *--------------------
  468.         clr.l    (a4)
  469.         move.l    a0,4(a4)
  470.  
  471.         *ùté╠ì┼żÆlé╠├░╠▐┘▓▌├▐»╕╜Ælé≡╩╠╧▌òäìå├░╠▐┘é╔É▌ÆΦ
  472.         *---------------------
  473.         move.l    a4,d4
  474.         lea.l    HuffTree(a6),a4
  475.         cmp.l    a4,d4
  476.         bcs    1f        ùté┼éáéΘ
  477.         cmp.l    a0,d4
  478.         bcs    2f        ùté┼é═é╚éó
  479. 1:
  480.         sub.l    a3,d4
  481.         lsr.w    #3,d4
  482.         move.b    d4,(a2,d3.w)
  483.         addq.w    #1,d3
  484. 2:    
  485.         tst.l    d1
  486.         bmi    MakeTreeFormat    ì¬é╔ìsé½Æàéóé╜
  487.  
  488.         clr.l    (a5)
  489.         move.l    a0,4(a5)
  490.  
  491.         *ùté╠ô±ö╘û┌é╔żé│éóÆlé╠├░╠▐┘▓▌├▐»╕╜Ælé≡╩╠╧▌òäìå├░╠▐┘é╔É▌ÆΦ
  492.         *---------------------
  493.         move.l    a5,d4
  494.         cmp.l    a4,d4
  495.         bcs    1f        ùté┼éáéΘ
  496.         cmp.l    a0,d4
  497.         bcs    2f        ùté┼é═é╚éó
  498. 1:
  499.         sub.l    a3,d4
  500.         lsr.w    #3,d4
  501.         move.b    d4,(a2,d3.w)
  502.         addq.w    #1,d3
  503. 2:    
  504.         *ìçîvé╠Ägùpùªé≡ôoÿ^
  505.         *-------------------
  506.         add.l    d1,d0
  507.         move.l    d0,(a0)
  508.         addq.l    #8,a0
  509.         bra    MakeTreeLoop
  510. MakeTreeFormat
  511.  
  512. *╩╠╧▌òäìå├░╠▐┘é╔É▌ÆΦé╡é╜üA▓▌├▐»╕╜ÆlÅçé≡żé│éóÅçé⌐éτüAæσé½éóÅçé╔ò└é╤ò╧éªéΘ
  513. *---------------------
  514.         lea.l    16(a2),a4
  515.         lea.l    (a2,d3.w),a5
  516.         add.w    d3,d6        DHT╗▓╜▐ìXÉV
  517.  
  518.         move.l    a5,-(sp)    Äƒé╠DHT▒─▐┌╜ò█æ╢
  519.  
  520.         sub.w    #16-1,d3
  521.         lsr.w    #1,d3
  522.         subq.w    #1,d3
  523. @@
  524.         move.b    (a4),d0
  525.         move.b    -(a5),(a4)+
  526.         move.b    d0,(a5)
  527.         dbra    d3,@b
  528.  
  529. *èeùté╠òäìå╦▐»─Æ╖é≡îvÄZé╖éΘ
  530. *--------------------------
  531.     *èeòäìå╦▐»─Æ╖ûêé╠Ælé╠Éö╢│▌─▄░╕Åëè·ë╗
  532.     *----------------------
  533.         lea.l    HuffCount(a6),a5
  534.         move.l    #16*16-4,d5
  535.         bsr    clear_area
  536.  
  537.     *òäìå╦▐»─Æ╖îvÄZ
  538.     *---------------------
  539.         lea.l    HuffCount(a6),a5
  540.         move.w    d7,d4
  541.         movea.l    a3,a1
  542. 1:
  543.         move.l    4(a1),d0
  544.         beq    4f        ùté═æ╢ì▌é╡é╚éó
  545.         movea.l    d0,a4
  546.  
  547.         *ì¬é▄é┼é╜é╟éΘ
  548.         *-------------------
  549.         moveq.l    #0,d1
  550.         bra    3f
  551. 2:
  552.         addq.l    #1,d1
  553.         move.l    4(a4),a4
  554. 3:
  555.         cmp.l    a4,a0
  556.         bne    2b        é▄é╛ì¬é╢éßé╚éó
  557.  
  558.         addq.b    #1,-1(a5,d1.w)    ╦▐»─Æ╖ûêé╠Ælé╠Éö╢│▌─
  559.  
  560.         *ăé╠├░╠▐┘
  561.         *------------------
  562. 4:
  563.         addq.l    #8,a1
  564.         dbra    d4,1b
  565.  
  566. *òäìå╦▐»─Æ╖é≡16bité╔ɺî└é╖éΘ
  567. *--------------------------
  568.         lea.l    HuffCount+16*16-4-1(a6),a1
  569.         move.w    #16*16-4-16-1,d4
  570. 1:
  571.         tst.b    (a1)
  572.         beq    4f
  573.  
  574.         lea.l    -2(a1),a0
  575. 2:
  576.         tst.b    (a0)
  577.         beq    3f
  578.         subq.b    #1,(a0)
  579.         addq.b    #2,1(a0)
  580.         addq.b    #1,-1(a1)
  581.         subq.b    #2,(a1)
  582.         bra    1b
  583. 3:
  584.         subq.l    #1,a0
  585.         bra    2b
  586. 4:
  587.         subq.l    #1,a1
  588.         dbra    d4,1b
  589.  
  590. *╩╠╧▌òäìå├░╠▐┘é╔òäìåûêé╔èäéΦôûé─é╜Ælé≡Åæé½ì₧é▐
  591. *--------------------------
  592.         moveq.l    #16-1,d4
  593.         lea.l    HuffCount(a6),a1
  594. @@
  595.         move.b    (a1)+,(a2)+
  596.         dbra.w    d4,@b
  597.  
  598.         movea.l    (sp)+,a2    Äƒé╠DHT▒─▐┌╜ò£ïA
  599.         rts
  600. ******************
  601. *
  602. *    ôⁿù═    a1    èeÆlé╠Åoî╗öΣùª├░╠▐┘
  603. *        d0    êΩö╘żé│éóÆl
  604. *        d1    ô±ö╘û┌é╔żé│éóÆl
  605. *        a4    êΩö╘żé│éóÆlé╠├░╠▐┘▒─▐┌╜
  606. *        a5    ô±ö╘û┌é╔żé│éóÆlé╠├░╠▐┘▒─▐┌╜
  607. *        d2    é▒é╠Ælê╚ë║é═üAé╖é┼é╔æ╝é╠ùté╞îïìçì╧é▌
  608. *        d4    ├░╠▐┘Éö-1
  609. *    Åoù═
  610. *        d0    êΩö╘żé│éóÆl
  611. *        d1    ô±ö╘û┌é╔żé│éóÆl
  612. *        a4    êΩö╘żé│éóÆlé╠├░╠▐┘▒─▐┌╜
  613. *        a5    ô±ö╘û┌é╔żé│éóÆlé╠├░╠▐┘▒─▐┌╜
  614. *    öjë≤    a1,d4,d5
  615. ******************
  616. OptHuffmanTableSub
  617. 1:
  618.         move.l    (a1),d5
  619.         beq    3f
  620.  
  621.         cmp.l    d5,d0
  622.         bcs    2f
  623.  
  624.         move.l    d0,d1
  625.         movea.l    a4,a5
  626.         move.l    d5,d0
  627.         movea.l    a1,a4
  628.         bra    3f
  629. 2:
  630.         cmp.l    d5,d1
  631.         bcs    3f
  632.         move.l    d5,d1
  633.         movea.l    a1,a5
  634. 3:
  635.         addq.l    #8,a1
  636.         dbra.w    d4,1b
  637.         rts
  638.  
  639.   .end
  640.